﻿Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
Imports Domain.Entidades
Imports System.Collections.Generic
Imports System.Xml.Serialization
Imports System.Runtime.Serialization
Imports Newtonsoft.Json

' Para permitir que se llame a este servicio web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la siguiente línea.
' <System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class wsBuscadorGeneral
    Inherits System.Web.Services.WebService

    Private mObjetoEntidad

    Public Property ObjetoEntidad()
        Get
            Return mObjetoEntidad
        End Get
        Set(ByVal value)
            'TODO 
            'Definir que validaciones se tienen que hacer en este caso de pasaje de parametros. 
            mObjetoEntidad = value
        End Set
    End Property

    <WebMethod()> _
    Public Function HelloWorld() As String
        Return "Hola a todos"
    End Function

    ''<WebMethod(), SoapRpcMethod(), SoapInclude(GetType(Domain.Entidades.Estado)), SoapInclude(GetType(Domain.Entidades.People))> 
    '<WebMethod(), SoapRpcMethod(), SoapInclude(GetType(Domain.Entidades.Estado))> _
    'Public Function BusquedaGral(ByVal strEntidad As String, ByRef listaEstados As List(Of Domain.Entidades.Estado)) As Boolean

    '    'Public Function BusquedaGral(Of T)(ByVal strEntidad As String, ByRef listaEstados As List(Of Domain.Entidades.Estado), _
    '    '                         ByRef entityList As List(Of T)) As Boolean
    '    ''strEntidad representa la entidad sobre la cual queremos instanciar la Busqueda Gral. 
    '    ''lista.... va a devolver todos los objetos de la entidad encontrados en la busq. Gral.
    '    ''Retorno: La funcion retorna true o false si pudo ejecutarse o no. 

    '    ''Variable que se va a utilizar para retornar true o false de acuerdo 
    '    ''al exito o fracaso de la operacion... definir cuando la operacion es 
    '    ''exitosa y cuando no!!!

    '    Dim exito As Boolean = True
    '    ''Recuperamos los estados de una entidad. 
    '    Dim objEstado As New Domain.Entidades.Estado
    '    'listaEstados = New List(Of Domain.Entidades.Estado)
    '    listaEstados = objEstado.EstadosDeUnaEntidad(strEntidad)
    '    ''Recuperamos los Objetos de la entidad que recibimos como parametro. 
    '    ''Como no se quiere acoplar la capa de dominio con la de presentacion, utilizamos 
    '    ''la refleccion de objetos.  
    '    ' '' '' ''Dim objectType As Type = Type.GetType(strEntidad, True)
    '    ' '' '' ''ObjetoEntidad = Activator.CreateInstance(objectType)
    '    '' '' '' ''Dim entityList As IList
    '    ' '' '' ''entityList = BuscarTodos(ObjetoEntidad)
    '    ' '' '' ''If entityList.Count > 0 Then
    '    ' '' '' ''    MsgBox("Llalaa")
    '    ' '' '' ''End If

    '    ''Hacer lo mismo para las etiquetas y los sitios web asociados.... 
    '    ''Para esto  hace falta crear las estructuras de datos correspondientes. 

    '    ''Devolver la info recolectada...
    '    ''Para esto vamos a utilizar un arreglo de las distintas listas que vamos recuperando. 

    '    Return exito
    'End Function

    <WebMethod(Description:="Devuelve la lista de Estados", MessageName:="Estados")> _
    Public Function Busqueda(ByVal strEntidad As String, ByRef strListObj As String, ByRef strListObjEstados As String, _
                             ByRef strListObjEtiquetas As String, ByRef strListObjEnlaces As String) As Boolean
        'Public Function Busqueda(ByVal strEntidad As String) As List(Of Domain.Entidades.Estado)
        Dim exito As Boolean = True

        'Busqueda de los estados posibles por los que puede pasar la entidad con la que se está trabajando.
        Dim lstEstados As List(Of Domain.Entidades.Estado)
        Dim objEstado As New Domain.Entidades.Estado
        lstEstados = objEstado.EstadosDeUnaEntidad(strEntidad)
        strListObjEstados = JsonConvert.SerializeObject(lstEstados)

        'Busqueda de las etiquetas posibles que se le pueden asignar a la entidad con la que se está trabajando.
        'Dim lstEtiquetas As List(Of Domain.Entidades.Etiqueta)
        'Dim objEtiqueta As New Domain.Entidades.Etiqueta
        'lstEtiquetas = objEtiqueta.EtiquetasDeUnaEntidad(strEntidad)
        'strListObjEtiquetas = JsonConvert.SerializeObject(lstEtiquetas)

        'Busqueda de los enlaces relacionados a una entidad.... 
        'ver que posibilidades hay de relacionar los enlaces a los usuarios. 
        'Dim lstEnlaces As List(Of Domain.Entidades.Enlace)
        'Dim objEnlace As New Domain.Entidades.Enlace
        'lstEnlaces = objEnlace.EnlacesDeUnaEntidad(strEntidad)
        'strListObjEnlaces = JsonConvert.SerializeObject(lstEnlaces)

        Dim objectType As Type = Type.GetType(strEntidad, True)
        ObjetoEntidad = Activator.CreateInstance(objectType)
        Dim entityList As IList
        ObjetoEntidad.BuscarTodos(entityList)
        'entityList = BuscarTodos(ObjetoEntidad)
        strListObj = JsonConvert.SerializeObject(entityList)

        Return exito
        'Return objEstado.EstadosDeUnaEntidad(strEntidad)
    End Function

    'Private Function BuscarTodos(Of T As Class)(ByVal entity As T) As List(Of T)
    '    Dim listaEntidades As IList(Of T) = New List(Of T)
    '    Dim Objeto As New Domain.EntidadBase(Of T)
    '    Objeto.BuscarTodos(listaEntidades)
    '    Return listaEntidades
    'End Function

End Class
